<?php
namespace BigVideo\Other\Observer;

/**
 * 目标对象  它知道观察他的观察者，并提供添加注册和删除观察者的接口
 * Class Subject
 * @package BigVideo\Other\Observer
 */
abstract class WeatherSubject
{
    /**
     * 用来保持观察者对象
     * @var array
     */
    protected $subjectList = [];

    public function attach(Observer $observer)
    {
        $this->subjectList[$observer->getName()] = $observer;
    }

    /**
     * 删除指定观察者
     * @param Observer $observer
     */
    public function detach(Observer $observer)
    {
        if(isset($this->subjectList[$observer->getName()])) {
            unset($this->subjectList[$observer->getName()]);
        }
    }

    /**
     * 通知所有注册的观察对象
     */
    abstract protected function notifyObserver();

}